home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_sax.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  20KB  |  624 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. from xml.sax import make_parser, ContentHandler, SAXException, SAXReaderNotAvailable, SAXParseException
  5.  
  6. try:
  7.     make_parser()
  8. except SAXReaderNotAvailable:
  9.     raise ImportError('no XML parsers available')
  10.  
  11. from xml.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, XMLFilterBase
  12. from xml.sax.expatreader import create_parser
  13. from xml.sax.xmlreader import InputSource, AttributesImpl, AttributesNSImpl
  14. from cStringIO import StringIO
  15. from test.test_support import verify, verbose, TestFailed, findfile
  16. import os
  17. tests = 0
  18. failures = []
  19.  
  20. def confirm(outcome, name):
  21.     global tests
  22.     tests = tests + 1
  23.     if outcome:
  24.         if verbose:
  25.             print 'Passed', name
  26.         
  27.     else:
  28.         failures.append(name)
  29.  
  30.  
  31. def test_make_parser2():
  32.     
  33.     try:
  34.         make_parser = make_parser
  35.         import xml.sax
  36.         p = make_parser()
  37.         make_parser = make_parser
  38.         import xml.sax
  39.         p = make_parser()
  40.         make_parser = make_parser
  41.         import xml.sax
  42.         p = make_parser()
  43.         make_parser = make_parser
  44.         import xml.sax
  45.         p = make_parser()
  46.         make_parser = make_parser
  47.         import xml.sax
  48.         p = make_parser()
  49.         make_parser = make_parser
  50.         import xml.sax
  51.         p = make_parser()
  52.     except:
  53.         return 0
  54.  
  55.     return p
  56.  
  57.  
  58. def test_escape_basic():
  59.     return escape('Donald Duck & Co') == 'Donald Duck & Co'
  60.  
  61.  
  62. def test_escape_all():
  63.     return escape('<Donald Duck & Co>') == '<Donald Duck & Co>'
  64.  
  65.  
  66. def test_escape_extra():
  67.     return escape('Hei p\xe5 deg', {
  68.         '\xe5': 'å' }) == 'Hei på deg'
  69.  
  70.  
  71. def test_unescape_basic():
  72.     return unescape('Donald Duck & Co') == 'Donald Duck & Co'
  73.  
  74.  
  75. def test_unescape_all():
  76.     return unescape('<Donald Duck & Co>') == '<Donald Duck & Co>'
  77.  
  78.  
  79. def test_unescape_extra():
  80.     return unescape('Hei p\xe5 deg', {
  81.         '\xe5': 'å' }) == 'Hei på deg'
  82.  
  83.  
  84. def test_unescape_amp_extra():
  85.     return unescape('&foo;', {
  86.         '&foo;': 'splat' }) == '&foo;'
  87.  
  88.  
  89. def test_quoteattr_basic():
  90.     return quoteattr('Donald Duck & Co') == '"Donald Duck & Co"'
  91.  
  92.  
  93. def test_single_quoteattr():
  94.     return quoteattr('Includes "double" quotes') == '\'Includes "double" quotes\''
  95.  
  96.  
  97. def test_double_quoteattr():
  98.     return quoteattr("Includes 'single' quotes") == '"Includes \'single\' quotes"'
  99.  
  100.  
  101. def test_single_double_quoteattr():
  102.     return quoteattr('Includes \'single\' and "double" quotes') == '"Includes \'single\' and "double" quotes"'
  103.  
  104.  
  105. def test_make_parser():
  106.     
  107.     try:
  108.         p = make_parser([
  109.             'xml.parsers.no_such_parser'])
  110.     except:
  111.         return 0
  112.  
  113.     return p
  114.  
  115. start = '<?xml version="1.0" encoding="iso-8859-1"?>\n'
  116.  
  117. def test_xmlgen_basic():
  118.     result = StringIO()
  119.     gen = XMLGenerator(result)
  120.     gen.startDocument()
  121.     gen.startElement('doc', { })
  122.     gen.endElement('doc')
  123.     gen.endDocument()
  124.     return result.getvalue() == start + '<doc></doc>'
  125.  
  126.  
  127. def test_xmlgen_content():
  128.     result = StringIO()
  129.     gen = XMLGenerator(result)
  130.     gen.startDocument()
  131.     gen.startElement('doc', { })
  132.     gen.characters('huhei')
  133.     gen.endElement('doc')
  134.     gen.endDocument()
  135.     return result.getvalue() == start + '<doc>huhei</doc>'
  136.  
  137.  
  138. def test_xmlgen_pi():
  139.     result = StringIO()
  140.     gen = XMLGenerator(result)
  141.     gen.startDocument()
  142.     gen.processingInstruction('test', 'data')
  143.     gen.startElement('doc', { })
  144.     gen.endElement('doc')
  145.     gen.endDocument()
  146.     return result.getvalue() == start + '<?test data?><doc></doc>'
  147.  
  148.  
  149. def test_xmlgen_content_escape():
  150.     result = StringIO()
  151.     gen = XMLGenerator(result)
  152.     gen.startDocument()
  153.     gen.startElement('doc', { })
  154.     gen.characters('<huhei&')
  155.     gen.endElement('doc')
  156.     gen.endDocument()
  157.     return result.getvalue() == start + '<doc><huhei&</doc>'
  158.  
  159.  
  160. def test_xmlgen_attr_escape():
  161.     result = StringIO()
  162.     gen = XMLGenerator(result)
  163.     gen.startDocument()
  164.     gen.startElement('doc', {
  165.         'a': '"' })
  166.     gen.startElement('e', {
  167.         'a': "'" })
  168.     gen.endElement('e')
  169.     gen.startElement('e', {
  170.         'a': '\'"' })
  171.     gen.endElement('e')
  172.     gen.endElement('doc')
  173.     gen.endDocument()
  174.     return result.getvalue() == start + '<doc a=\'"\'><e a="\'"></e><e a="\'""></e></doc>'
  175.  
  176.  
  177. def test_xmlgen_ignorable():
  178.     result = StringIO()
  179.     gen = XMLGenerator(result)
  180.     gen.startDocument()
  181.     gen.startElement('doc', { })
  182.     gen.ignorableWhitespace(' ')
  183.     gen.endElement('doc')
  184.     gen.endDocument()
  185.     return result.getvalue() == start + '<doc> </doc>'
  186.  
  187. ns_uri = 'http://www.python.org/xml-ns/saxtest/'
  188.  
  189. def test_xmlgen_ns():
  190.     result = StringIO()
  191.     gen = XMLGenerator(result)
  192.     gen.startDocument()
  193.     gen.startPrefixMapping('ns1', ns_uri)
  194.     gen.startElementNS((ns_uri, 'doc'), 'ns1:doc', { })
  195.     gen.startElementNS((None, 'udoc'), None, { })
  196.     gen.endElementNS((None, 'udoc'), None)
  197.     gen.endElementNS((ns_uri, 'doc'), 'ns1:doc')
  198.     gen.endPrefixMapping('ns1')
  199.     gen.endDocument()
  200.     return result.getvalue() == start + '<ns1:doc xmlns:ns1="%s"><udoc></udoc></ns1:doc>' % ns_uri
  201.  
  202.  
  203. def test_filter_basic():
  204.     result = StringIO()
  205.     gen = XMLGenerator(result)
  206.     filter = XMLFilterBase()
  207.     filter.setContentHandler(gen)
  208.     filter.startDocument()
  209.     filter.startElement('doc', { })
  210.     filter.characters('content')
  211.     filter.ignorableWhitespace(' ')
  212.     filter.endElement('doc')
  213.     filter.endDocument()
  214.     return result.getvalue() == start + '<doc>content </doc>'
  215.  
  216.  
  217. def test_expat_file():
  218.     parser = create_parser()
  219.     result = StringIO()
  220.     xmlgen = XMLGenerator(result)
  221.     parser.setContentHandler(xmlgen)
  222.     parser.parse(open(findfile('test' + os.extsep + 'xml')))
  223.     return result.getvalue() == xml_test_out
  224.  
  225.  
  226. class TestDTDHandler:
  227.     
  228.     def __init__(self):
  229.         self._notations = []
  230.         self._entities = []
  231.  
  232.     
  233.     def notationDecl(self, name, publicId, systemId):
  234.         self._notations.append((name, publicId, systemId))
  235.  
  236.     
  237.     def unparsedEntityDecl(self, name, publicId, systemId, ndata):
  238.         self._entities.append((name, publicId, systemId, ndata))
  239.  
  240.  
  241.  
  242. def test_expat_dtdhandler():
  243.     parser = create_parser()
  244.     handler = TestDTDHandler()
  245.     parser.setDTDHandler(handler)
  246.     parser.feed('<!DOCTYPE doc [\n')
  247.     parser.feed('  <!ENTITY img SYSTEM "expat.gif" NDATA GIF>\n')
  248.     parser.feed('  <!NOTATION GIF PUBLIC "-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">\n')
  249.     parser.feed(']>\n')
  250.     parser.feed('<doc></doc>')
  251.     parser.close()
  252.     if handler._notations == [
  253.         ('GIF', '-//CompuServe//NOTATION Graphics Interchange Format 89a//EN', None)]:
  254.         pass
  255.     return handler._entities == [
  256.         ('img', None, 'expat.gif', 'GIF')]
  257.  
  258.  
  259. class TestEntityResolver:
  260.     
  261.     def resolveEntity(self, publicId, systemId):
  262.         inpsrc = InputSource()
  263.         inpsrc.setByteStream(StringIO('<entity/>'))
  264.         return inpsrc
  265.  
  266.  
  267.  
  268. def test_expat_entityresolver():
  269.     parser = create_parser()
  270.     parser.setEntityResolver(TestEntityResolver())
  271.     result = StringIO()
  272.     parser.setContentHandler(XMLGenerator(result))
  273.     parser.feed('<!DOCTYPE doc [\n')
  274.     parser.feed('  <!ENTITY test SYSTEM "whatever">\n')
  275.     parser.feed(']>\n')
  276.     parser.feed('<doc>&test;</doc>')
  277.     parser.close()
  278.     return result.getvalue() == start + '<doc><entity></entity></doc>'
  279.  
  280.  
  281. class AttrGatherer(ContentHandler):
  282.     
  283.     def startElement(self, name, attrs):
  284.         self._attrs = attrs
  285.  
  286.     
  287.     def startElementNS(self, name, qname, attrs):
  288.         self._attrs = attrs
  289.  
  290.  
  291.  
  292. def test_expat_attrs_empty():
  293.     parser = create_parser()
  294.     gather = AttrGatherer()
  295.     parser.setContentHandler(gather)
  296.     parser.feed('<doc/>')
  297.     parser.close()
  298.     return verify_empty_attrs(gather._attrs)
  299.  
  300.  
  301. def test_expat_attrs_wattr():
  302.     parser = create_parser()
  303.     gather = AttrGatherer()
  304.     parser.setContentHandler(gather)
  305.     parser.feed("<doc attr='val'/>")
  306.     parser.close()
  307.     return verify_attrs_wattr(gather._attrs)
  308.  
  309.  
  310. def test_expat_nsattrs_empty():
  311.     parser = create_parser(1)
  312.     gather = AttrGatherer()
  313.     parser.setContentHandler(gather)
  314.     parser.feed('<doc/>')
  315.     parser.close()
  316.     return verify_empty_nsattrs(gather._attrs)
  317.  
  318.  
  319. def test_expat_nsattrs_wattr():
  320.     parser = create_parser(1)
  321.     gather = AttrGatherer()
  322.     parser.setContentHandler(gather)
  323.     parser.feed("<doc xmlns:ns='%s' ns:attr='val'/>" % ns_uri)
  324.     parser.close()
  325.     attrs = gather._attrs
  326.     if attrs.getLength() == 1 and attrs.getNames() == [
  327.         (ns_uri, 'attr')]:
  328.         if (attrs.getQNames() == [] or attrs.getQNames() == [
  329.             'ns:attr']) and len(attrs) == 1 and attrs.has_key((ns_uri, 'attr')) and attrs.keys() == [
  330.             (ns_uri, 'attr')] and attrs.get((ns_uri, 'attr')) == 'val' and attrs.get((ns_uri, 'attr'), 25) == 'val' and attrs.items() == [
  331.             ((ns_uri, 'attr'), 'val')] and attrs.values() == [
  332.             'val'] and attrs.getValue((ns_uri, 'attr')) == 'val':
  333.             pass
  334.     return attrs[(ns_uri, 'attr')] == 'val'
  335.  
  336. xml_test_out = open(findfile('test' + os.extsep + 'xml' + os.extsep + 'out')).read()
  337.  
  338. def test_expat_inpsource_filename():
  339.     parser = create_parser()
  340.     result = StringIO()
  341.     xmlgen = XMLGenerator(result)
  342.     parser.setContentHandler(xmlgen)
  343.     parser.parse(findfile('test' + os.extsep + 'xml'))
  344.     return result.getvalue() == xml_test_out
  345.  
  346.  
  347. def test_expat_inpsource_sysid():
  348.     parser = create_parser()
  349.     result = StringIO()
  350.     xmlgen = XMLGenerator(result)
  351.     parser.setContentHandler(xmlgen)
  352.     parser.parse(InputSource(findfile('test' + os.extsep + 'xml')))
  353.     return result.getvalue() == xml_test_out
  354.  
  355.  
  356. def test_expat_inpsource_stream():
  357.     parser = create_parser()
  358.     result = StringIO()
  359.     xmlgen = XMLGenerator(result)
  360.     parser.setContentHandler(xmlgen)
  361.     inpsrc = InputSource()
  362.     inpsrc.setByteStream(open(findfile('test' + os.extsep + 'xml')))
  363.     parser.parse(inpsrc)
  364.     return result.getvalue() == xml_test_out
  365.  
  366.  
  367. def test_expat_incremental():
  368.     result = StringIO()
  369.     xmlgen = XMLGenerator(result)
  370.     parser = create_parser()
  371.     parser.setContentHandler(xmlgen)
  372.     parser.feed('<doc>')
  373.     parser.feed('</doc>')
  374.     parser.close()
  375.     return result.getvalue() == start + '<doc></doc>'
  376.  
  377.  
  378. def test_expat_incremental_reset():
  379.     result = StringIO()
  380.     xmlgen = XMLGenerator(result)
  381.     parser = create_parser()
  382.     parser.setContentHandler(xmlgen)
  383.     parser.feed('<doc>')
  384.     parser.feed('text')
  385.     result = StringIO()
  386.     xmlgen = XMLGenerator(result)
  387.     parser.setContentHandler(xmlgen)
  388.     parser.reset()
  389.     parser.feed('<doc>')
  390.     parser.feed('text')
  391.     parser.feed('</doc>')
  392.     parser.close()
  393.     return result.getvalue() == start + '<doc>text</doc>'
  394.  
  395.  
  396. def test_expat_locator_noinfo():
  397.     result = StringIO()
  398.     xmlgen = XMLGenerator(result)
  399.     parser = create_parser()
  400.     parser.setContentHandler(xmlgen)
  401.     parser.feed('<doc>')
  402.     parser.feed('</doc>')
  403.     parser.close()
  404.     if parser.getSystemId() is None and parser.getPublicId() is None:
  405.         pass
  406.     return parser.getLineNumber() == 1
  407.  
  408.  
  409. def test_expat_locator_withinfo():
  410.     result = StringIO()
  411.     xmlgen = XMLGenerator(result)
  412.     parser = create_parser()
  413.     parser.setContentHandler(xmlgen)
  414.     parser.parse(findfile('test.xml'))
  415.     if parser.getSystemId() == findfile('test.xml'):
  416.         pass
  417.     return parser.getPublicId() is None
  418.  
  419.  
  420. def test_expat_inpsource_location():
  421.     parser = create_parser()
  422.     parser.setContentHandler(ContentHandler())
  423.     source = InputSource()
  424.     source.setByteStream(StringIO('<foo bar foobar>'))
  425.     name = 'a file name'
  426.     source.setSystemId(name)
  427.     
  428.     try:
  429.         parser.parse(source)
  430.     except SAXException:
  431.         e = None
  432.         return e.getSystemId() == name
  433.  
  434.  
  435.  
  436. def test_expat_incomplete():
  437.     parser = create_parser()
  438.     parser.setContentHandler(ContentHandler())
  439.     
  440.     try:
  441.         parser.parse(StringIO('<foo>'))
  442.     except SAXParseException:
  443.         return 1
  444.  
  445.     return 0
  446.  
  447.  
  448. def test_sax_parse_exception_str():
  449.     str(SAXParseException('message', None, DummyLocator(1, 1)))
  450.     str(SAXParseException('message', None, DummyLocator(None, 1)))
  451.     str(SAXParseException('message', None, DummyLocator(1, None)))
  452.     str(SAXParseException('message', None, DummyLocator(None, None)))
  453.     return 1
  454.  
  455.  
  456. class DummyLocator:
  457.     
  458.     def __init__(self, lineno, colno):
  459.         self._lineno = lineno
  460.         self._colno = colno
  461.  
  462.     
  463.     def getPublicId(self):
  464.         return 'pubid'
  465.  
  466.     
  467.     def getSystemId(self):
  468.         return 'sysid'
  469.  
  470.     
  471.     def getLineNumber(self):
  472.         return self._lineno
  473.  
  474.     
  475.     def getColumnNumber(self):
  476.         return self._colno
  477.  
  478.  
  479.  
  480. def verify_empty_attrs(attrs):
  481.     
  482.     try:
  483.         attrs.getValue('attr')
  484.         gvk = 0
  485.     except KeyError:
  486.         gvk = 1
  487.  
  488.     
  489.     try:
  490.         attrs.getValueByQName('attr')
  491.         gvqk = 0
  492.     except KeyError:
  493.         gvqk = 1
  494.  
  495.     
  496.     try:
  497.         attrs.getNameByQName('attr')
  498.         gnqk = 0
  499.     except KeyError:
  500.         gnqk = 1
  501.  
  502.     
  503.     try:
  504.         attrs.getQNameByName('attr')
  505.         gqnk = 0
  506.     except KeyError:
  507.         gqnk = 1
  508.  
  509.     
  510.     try:
  511.         attrs['attr']
  512.         gik = 0
  513.     except KeyError:
  514.         gik = 1
  515.  
  516.     if attrs.getLength() == 0 and attrs.getNames() == [] and attrs.getQNames() == [] and len(attrs) == 0 and not attrs.has_key('attr') and attrs.keys() == [] and attrs.get('attrs') is None and attrs.get('attrs', 25) == 25 and attrs.items() == [] and attrs.values() == [] and gvk and gvqk and gnqk and gik:
  517.         pass
  518.     return gqnk
  519.  
  520.  
  521. def verify_attrs_wattr(attrs):
  522.     if attrs.getLength() == 1 and attrs.getNames() == [
  523.         'attr'] and attrs.getQNames() == [
  524.         'attr'] and len(attrs) == 1 and attrs.has_key('attr') and attrs.keys() == [
  525.         'attr'] and attrs.get('attr') == 'val' and attrs.get('attr', 25) == 'val' and attrs.items() == [
  526.         ('attr', 'val')] and attrs.values() == [
  527.         'val'] and attrs.getValue('attr') == 'val' and attrs.getValueByQName('attr') == 'val' and attrs.getNameByQName('attr') == 'attr' and attrs['attr'] == 'val':
  528.         pass
  529.     return attrs.getQNameByName('attr') == 'attr'
  530.  
  531.  
  532. def test_attrs_empty():
  533.     return verify_empty_attrs(AttributesImpl({ }))
  534.  
  535.  
  536. def test_attrs_wattr():
  537.     return verify_attrs_wattr(AttributesImpl({
  538.         'attr': 'val' }))
  539.  
  540.  
  541. def verify_empty_nsattrs(attrs):
  542.     
  543.     try:
  544.         attrs.getValue((ns_uri, 'attr'))
  545.         gvk = 0
  546.     except KeyError:
  547.         gvk = 1
  548.  
  549.     
  550.     try:
  551.         attrs.getValueByQName('ns:attr')
  552.         gvqk = 0
  553.     except KeyError:
  554.         gvqk = 1
  555.  
  556.     
  557.     try:
  558.         attrs.getNameByQName('ns:attr')
  559.         gnqk = 0
  560.     except KeyError:
  561.         gnqk = 1
  562.  
  563.     
  564.     try:
  565.         attrs.getQNameByName((ns_uri, 'attr'))
  566.         gqnk = 0
  567.     except KeyError:
  568.         gqnk = 1
  569.  
  570.     
  571.     try:
  572.         attrs[(ns_uri, 'attr')]
  573.         gik = 0
  574.     except KeyError:
  575.         gik = 1
  576.  
  577.     if attrs.getLength() == 0 and attrs.getNames() == [] and attrs.getQNames() == [] and len(attrs) == 0 and not attrs.has_key((ns_uri, 'attr')) and attrs.keys() == [] and attrs.get((ns_uri, 'attr')) is None and attrs.get((ns_uri, 'attr'), 25) == 25 and attrs.items() == [] and attrs.values() == [] and gvk and gvqk and gnqk and gik:
  578.         pass
  579.     return gqnk
  580.  
  581.  
  582. def test_nsattrs_empty():
  583.     return verify_empty_nsattrs(AttributesNSImpl({ }, { }))
  584.  
  585.  
  586. def test_nsattrs_wattr():
  587.     attrs = AttributesNSImpl({
  588.         (ns_uri, 'attr'): 'val' }, {
  589.         (ns_uri, 'attr'): 'ns:attr' })
  590.     if attrs.getLength() == 1 and attrs.getNames() == [
  591.         (ns_uri, 'attr')] and attrs.getQNames() == [
  592.         'ns:attr'] and len(attrs) == 1 and attrs.has_key((ns_uri, 'attr')) and attrs.keys() == [
  593.         (ns_uri, 'attr')] and attrs.get((ns_uri, 'attr')) == 'val' and attrs.get((ns_uri, 'attr'), 25) == 'val' and attrs.items() == [
  594.         ((ns_uri, 'attr'), 'val')] and attrs.values() == [
  595.         'val'] and attrs.getValue((ns_uri, 'attr')) == 'val' and attrs.getValueByQName('ns:attr') == 'val' and attrs.getNameByQName('ns:attr') == (ns_uri, 'attr') and attrs[(ns_uri, 'attr')] == 'val':
  596.         pass
  597.     return attrs.getQNameByName((ns_uri, 'attr')) == 'ns:attr'
  598.  
  599.  
  600. def make_test_output():
  601.     parser = create_parser()
  602.     result = StringIO()
  603.     xmlgen = XMLGenerator(result)
  604.     parser.setContentHandler(xmlgen)
  605.     parser.parse(findfile('test' + os.extsep + 'xml'))
  606.     outf = open(findfile('test' + os.extsep + 'xml' + os.extsep + 'out'), 'w')
  607.     outf.write(result.getvalue())
  608.     outf.close()
  609.  
  610. items = locals().items()
  611. items.sort()
  612. for name, value in items:
  613.     if name[:5] == 'test_':
  614.         confirm(value(), name)
  615.         continue
  616.  
  617. del items
  618. if verbose:
  619.     print '%d tests, %d failures' % (tests, len(failures))
  620.  
  621. if failures:
  622.     raise TestFailed('%d of %d tests failed: %s' % (len(failures), tests, ', '.join(failures)))
  623.  
  624.